#测试内容，把眼镜图片贴在画面上
import cv2
import numpy as np

# 打开摄像头
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

# 读取 PNG（必须带透明通道）
overlay = cv2.imread("glass.png", cv2.IMREAD_UNCHANGED)  # shape: (h, w, 4)

while cap.isOpened():
    success, frame = cap.read()
    if not success:
        print("⚠️ 无法读取摄像头画面")
        break

    # 先调整 overlay 大小（比如固定为 200x100）
    overlay_resized = cv2.resize(overlay, (400, 100))

    # 获取尺寸
    oh, ow, oc = overlay_resized.shape

    # 定义放置位置（比如左上角 (50,50)）
    x, y = 50, 50

    # 截取对应区域
    roi = frame[y:y+oh, x:x+ow]

    # 拆分 PNG 的 RGBA 通道
    overlay_rgb = overlay_resized[:, :, :3]   # 前三通道 RGB
    overlay_alpha = overlay_resized[:, :, 3]  # 透明通道

    # 构建掩码（归一化到 0~1）
    alpha = overlay_alpha / 255.0
    alpha = alpha[..., None]  # 扩展维度方便广播运算

    # 融合图像：frame = overlay * alpha + roi * (1-alpha)
    roi[:] = (alpha * overlay_rgb + (1 - alpha) * roi).astype(np.uint8)

    # 显示结果
    cv2.imshow("Overlay PNG Demo", frame)

    # 按 ESC 退出
    if cv2.waitKey(5) & 0xFF == 27:
        break

cap.release()
cv2.destroyAllWindows()